package com.example.userdepartment.mapper;

import com.example.userdepartment.entity.Department;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 部门数据访问层
 */
@Repository
public interface DepartmentMapper {
    
    /**
     * 查询所有部门
     *
     * @return 部门列表
     */
    List<Department> selectAll();
    
    /**
     * 根据ID查询部门
     *
     * @param id 部门ID
     * @return 部门信息
     */
    Department selectById(Integer id);
    
    /**
     * 根据部门ID查询部门及其下所有用户
     *
     * @param id 部门ID
     * @return 包含用户列表的部门
     */
    Department selectWithUsersById(Integer id);
    
    /**
     * 插入部门
     *
     * @param department 部门信息
     * @return 影响行数
     */
    int insert(Department department);
    
    /**
     * 更新部门
     *
     * @param department 部门信息
     * @return 影响行数
     */
    int update(Department department);
    
    /**
     * 删除部门
     *
     * @param id 部门ID
     * @return 影响行数
     */
    int delete(Integer id);
    
    /**
     * 批量删除部门
     *
     * @param ids 部门ID列表
     * @return 影响行数
     */
    int batchDelete(@Param("ids") List<Integer> ids);
    
    /**
     * 根据部门名称查询部门
     *
     * @param name 部门名称
     * @return 部门信息
     */
    Department selectByName(String name);
} 